--[[
name: eval函数实现封装
]]

-- 定义 eval 函数
function eval(code, env, ...)
    -- 使用 load 函数创建一个函数，并指定环境
    local chunk, err = load("return function(args) " .. code .. " end", nil, "t", env)
    if not chunk then
        error(err)
    end

    -- 调用生成的函数，并传递参数
    local func = chunk()
    return func({...})
end

-- 定义外部变量
local externalData = {
    tmp = 20,
    hum = 30
}

_G.ledValue = 0

-- 定义函数代码
local functionCode = [[
    local value = (data.tmp + data.hum) / 2
    log.info("函数里 ledValue ", ledValue)
    if ledValue == 1 then
        log.info("修改为1")
        ledValue = 0;
        ChangeValue("ledValue", 0)
        log.info("修改为后 ", ledValue)
    else 
        ledValue = 1;
        ChangeValue("ledValue", 1)
    end
    led(ledValue)
    log.info("开始222 ")
    if value > 34 then
        return 1
    else
        return 2
    end
]]

function ChangeValue(key,value) 
    _G[key] = value
end

sys.taskInit(function () 
    sys.wait(3000)
    while 1 do 
        sys.wait(3000)
        log.info(" ------ ....开始执行中.... ------ ")

        -- 测试 eval 函数
        local result = eval(functionCode, {data = externalData, led = _G.led, log = log, sys = sys,ledValue = _G.ledValue,  _G = _G, ChangeValue = ChangeValue })
        -- log.info("result:", result)
        log.info("操作后  ledValue ", ledValue)
    end
end)
